﻿//==============================================================================
// File: ScopeChangedEventArgs.cs
// Created: 2010-05-10
// Author: Piotr Włodek
//==============================================================================
// This file is a part of MAMMOTH project.
// Copyright (C) 2010 AGH University of Science and Technology, Krakow.
// https://caribou.iisg.agh.edu.pl/trac/mammoth
//
// Mammoth is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// Mammoth is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
// 
// You should have received a copy of the GNU Lesser General Public License
// along with WpfRcp. If not, see http://www.gnu.org/licenses/.
//==============================================================================

using System;

namespace WpfRcp.PropertyModel.Scope
{
    /// <summary>
    /// Represents arguments for the <see cref="INotifyScopeChanged.ScopeChanged"/> event.
    /// </summary>
    public class ScopeChangedEventArgs : EventArgs
    {
        /// <summary>
        /// Initializes a new instance of <see cref="ScopeChangedEventArgs"/> class.
        /// </summary>
        /// <param name="newProperty">Property added to a scope, or null if no property was added.</param>
        /// <param name="oldProperty">Property removed from a scope, or null if no property was removed.</param>
        /// <param name="registrationType">Type that added/removed property is registered for.</param>
        public ScopeChangedEventArgs(MetaProperty newProperty, MetaProperty oldProperty, Type registrationType)
        {
            NewProperty = newProperty;
            OldProperty = oldProperty;
            RegistrationType = registrationType;
        }

        /// <summary>
        /// Gets a property added to a scope, or null if no property was added.
        /// </summary>
        public MetaProperty NewProperty { get; private set; }

        /// <summary>
        /// Gets a property removed from a scope, or null if no property was removed.
        /// </summary>
        public MetaProperty OldProperty { get; private set; }

        /// <summary>
        /// Gets a type that added/removed property is registered for.
        /// </summary>
        public Type RegistrationType { get; private set; }
    }
}